import Vue from "vue";
import axios from "axios";
import { Message } from 'element-ui';
Vue.component(Message);
let CancelToken = axios.CancelToken; //取消请求
let cancelFlag = true;
axios.defaults.withCredentials = true;
// axios.defaults.baseURL = "https://easy-mock.com/mock/5b7bc3d450a6182006a1986e"
axios.interceptors.request.use(
    config => {
        //设置默认请求头
        config.headers["X-Requested-With"] = "XMLHttpRequest";
        config.timeout = 20000; // 超时设置
        let cancelGroupName;
        if (config.method === "post") {
            if (config.data && config.data.cancelGroupName) {
                // post请求ajax取消函数配置
                cancelGroupName = config.data.cancelGroupName;
            }
            // config.data = qs.stringify(config.data)
        } else {
            if (config.params && config.params.cancelGroupName) {
                // get请求ajax取消函数配置
                cancelGroupName = config.params.cancelGroupName;
            }
        }
        if (cancelGroupName) {
            if (axios[cancelGroupName] && axios[cancelGroupName].cancel) {
                axios[cancelGroupName].cancel();
            }
            config.cancelToken = new CancelToken(c => {
                axios[cancelGroupName] = {};
                axios[cancelGroupName].cancel = c;
            });
        }
        return config;
    },
    error => {
        return Promise.reject(error);
    }
);

axios.interceptors.response.use(
    config => {
        return config;
    },
    error => {
        if (error && error.response) {
            switch (error.response.status) {
                case 400:
                    error.message = "错误请求";
                    break;
                case 401:
                    error.message = "未授权，请重新登录";
                    break;
                case 403:
                    error.message = "拒绝访问";
                    break;
                case 404:
                    error.message = "请求错误,未找到该资源";
                    break;
                case 405:
                    error.message = "请求方法未允许";
                    break;
                case 408:
                    error.message = "请求超时";
                    break;
                case 500:
                    error.message = "服务器端出错";
                    break;
                case 501:
                    error.message = "网络未实现";
                    break;
                case 502:
                    error.message = "网络错误";
                    break;
                case 503:
                    error.message = "服务不可用";
                    break;
                case 504:
                    error.message = "网络超时";
                    break;
                case 505:
                    error.message = "http版本不支持该请求";
                    break;
                default:
                    error.message = `连接错误${error.response.status}`;
            }
        } else {
            error.message = "连接到服务器失败";
        }
        return Promise.reject(error.message);
    }
);

export default axios;